/**
 * 冒泡排序原理是，以一个数为基数，比较这个基数和它右边的数，如果基数大，则基数和右边数交换位置，比基数小的数字往前移动一位；
 * 如果基数比右边的数字小，则不交换，右边的数变为基数，继续和它右边的数进行比较，一轮下来，这个数组中最大的数会被移动到最后；
 * 第二轮继续，会选择出倒数第二大的数字，放到倒数第二位置
 * 可以从菜鸟教程里查看不通语言的冒泡排序代码实现，(python好简单，几行实现)
 * 可以到这个网站 https://visualgo.net/zh/sorting 查看演示动画，这个网站有好多算法演示
 */
package com.test.sort;

import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {
        int[] a = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};

        int tmp;
        for (int i = 0; i < a.length; i++) {  //i表示第几次遍历，非下标元素
            int m = 0;  //用m表示每轮排序里，用来比较的基数下标元素，但在每轮排序开始前把m置0 ，否则还是上次比较的最大下标数字
            while(m < a.length-1) {
                if (a[m] <= a[m+1]) {
                    m +=1;  //如果当前基数比右边小，则下标+1，右边数变为基数，continue继续下一个比较
                }
                else  {  //如果当前基数比右边大，则把两个数交换，同时下标+1，新的右边数变为基数，continue继续下一个比较
                    tmp = a[m];
                    a[m] = a[m+1];
                    a[m+1] = tmp;
                    m += 1;
                }
            }
        }
        System.out.println(Arrays.toString(a));  //用Arrays.toString(a)把数组转为字符串打印
    }
}
